﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProjectEulerSolutions
{
    /*
     * 
     * Euler's Totient function, φ(n) [sometimes called the phi function], is used to determine the number of positive numbers less than or equal to n which are relatively prime to n. For example, as 1, 2, 4, 5, 7, and 8, are all less than nine and relatively prime to nine, φ(9)=6.
The number 1 is considered to be relatively prime to every positive number, so φ(1)=1.

Interestingly, φ(87109)=79180, and it can be seen that 87109 is a permutation of 79180.

Find the value of n, 1 < n < 10^7, for which φ(n) is a permutation of n and the ratio n/φ(n) produces a minimum.

     * */
    class Problem70 : IProblem
    {
        public string Calculate()
        {
            //isto ko i prosli, bezveze

            int limit = 9999999;

            var totients = new Problem69().CalculateTotients(limit);


            int min_n = 0;
            double min_ratio = double.MaxValue;

            for (int i = 1; i < totients.Length; i++)
            {
                var digitsN = CommonFunctions.GetDigits(i + 1);
                var digitsPhi = CommonFunctions.GetDigits(totients[i]);

                if (digitsN.Count != digitsPhi.Count)
                    continue;

                foreach (int digit in digitsN)
                {
                    digitsPhi.Remove(digit);
                }

                if (digitsPhi.Count != 0)
                    continue;

                double ratio = (i + 1) / (double)totients[i];

                if (ratio < min_ratio)
                {
                    min_ratio = ratio;
                    min_n = i + 1;
                }

            }

            return min_n.ToString();
        }
    }
}
